﻿using System;
using System.Collections.Generic;
using System.Reflection;
using System.ServiceModel;
using Cubicle.Core.DataContracts;

namespace Cubicle.Core.Interfaces
{
    public interface IResolver
    {
        bool AutoAssemblyResolveState
        {
            [OperationContract(Name = "GetAutoAssemblyResolveState")]
            get;

            [OperationContract(Name = "SetAutoAssemblyResolveState")]
            set;
        }

        Assembly ResolveAssembly(string fullName);
        bool CanResolve(string asmId);
        IEnumerable<AssemblyData> ListAssemblies();
        IEnumerable<TypeData> ListTypes(string asmId);
        IEnumerable<TypeData> FindAll<TInterface>();
        IEnumerable<TypeData> FindAll(string interfaceName);
        IEnumerable<Type> FindTypes<TInterface>(IEnumerable<string> typeNames);
        IEnumerable<Type> FindTypes<TInterface>();
    }
}
